iT邦幫忙

2024 iThome 鐵人賽

DAY 5
0
Mobile Development

Jetpack Compose 從心開始系列 第 5

Jetpack Compose 從心開始 Day5 - 新增按鈕互動

  • 分享至 

  • xImage
  •  

前言

    設計中秋卡片應用程式,練習用Compose 新增按鈕來換圖片

新增按鈕實作

使用remember 加到可組合項,可組合函式能夠將物件儲存在記憶體中。
在 remember 可組合項主體傳入 mutableStateOf() 函式,然後向函式傳遞 1 引數。

var result by remember { mutableStateOf(1) }

再宣告一個不可變的 imageResource 變數,接受 result 變數,決定resource圖

val imageResource = when (result) {
        1 -> R.drawable.moon
        2 -> R.drawable.moon_2
        3 -> R.drawable.moon_3
        4 -> R.drawable.moon_4
        5 -> R.drawable.moon_5
        else -> R.drawable.moon_6
    }

修改 GreenImage function 加傳入 imageResource參數
記得 Preview 也要修改哦

@Composable
fun GreenImage(imageResource: Int) {
    Image(painter = painterResource(id = imageResource), contentDescription = "moon")
}

@Preview(showBackground = true)
@Composable
fun GreetingImagePreview() {
    GreenImage(R.drawable.moon_6)
}

加入按鈕實作

@Composable
fun Greeting(name: String, from: String, modifier: Modifier = Modifier) {
    var result by remember { mutableStateOf(1) }
    val imageResource = when (result) {
        1 -> R.drawable.moon
        2 -> R.drawable.moon_2
        3 -> R.drawable.moon_3
        4 -> R.drawable.moon_4
        5 -> R.drawable.moon_5
        else -> R.drawable.moon_6
    }

    Column(
        verticalArrangement = Arrangement.Center,
        modifier = modifier
    ) {
        Box() {
            GreenImage(imageResource)
            Text(
                text = name,
                modifier = Modifier.align(Alignment.TopStart),
                fontSize = 32.sp,
                color = Color.White,
                lineHeight = 116.sp,
                textAlign = TextAlign.Center
            )
            Text(
                text = from,
                fontSize = 28.sp,
                color = Color.White,
                modifier = Modifier
                    .align(Alignment.BottomEnd)
                    .padding(16.dp),
            )
        }
        Button(
            onClick = {
                result = (1..6).random()
            },
            modifier = Modifier.fillMaxWidth()
                .padding(16.dp)
        ) {
            Text(text = "按我換圖")
        }
        Text(text =result.toString(),
            fontSize = 20.sp,
            modifier=Modifier.padding(16.dp)
            )
    }
}

實機執行結果

https://ithelp.ithome.com.tw/upload/images/20240915/20121643u9AggUXjDY.png


上一篇
Jetpack Compose 從心開始 Day4 - 圖片排版
下一篇
Jetpack Compose 從心開始 Day6 - 與輸入框 UI 和狀態互動
系列文
Jetpack Compose 從心開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言